package models

import (
	"backendChat/utils"
	"fmt"
	"time"

	"gorm.io/gorm"
)

// 定义数据库用户表-用户基本信息结构体
type UserBasic struct {
	gorm.Model
	Name       string     `json:"name"`       // 用户名
	Password   string     `json:"password"`   // 密码
	RealName   string     `json:"realName"`   // 用户真实姓名
	Age        int        `json:"age"`        // 用户年龄
	Sex        int        `json:"sex"`        // 用户性别
	Avatar     string     `json:"avatar"`     // 用户头像
	Birthday   *time.Time `json:"birthday"`   // 用户出生年月
	Address    string     `json:"address"`    // 用户地址
	Phone      string     `json:"phone"`      // 用户手机号
	Email      string     `json:"email"`      // 用户邮箱
	Role       string     `json:"role"`       // 用户角色
	Grade      string     `json:"grade"`      // 用户等级
	Ip         string     `json:"ip"`         // 用户登录IP
	Port       string     `json:"port"`       // 用户登录端口
	LoginTime  string     `json:"loginTime"`  // 用户登录时间
	LogoutTime string     `json:"logoutTime"` // 用户登出时间
	DeviceInfo string     `json:"deviceInfo"` // 用户设备信息
	Salt       string     `json:"salt"`       // 密码加密子串
}

// 定义返回给用户的用户信息结构体
type UserBasicClient struct {
	ID       uint       `json:"id"`
	Name     string     `json:"name"`     // 用户名
	RealName string     `json:"realName"` // 用户真实姓名
	Age      int        `json:"age"`      // 用户年龄
	Birthday *time.Time `json:"birthday"` // 用户出生年月
	Address  string     `json:"address"`  // 用户地址
	Phone    string     `json:"phone"`    // 用户手机号
	Email    string     `json:"email"`    // 用户邮箱
	Role     string     `json:"role"`     // 用户角色
	Grade    string     `json:"grade"`    // 用户等级
	Token    string     `json:"token"`    // 用户鉴权信息
}

// 将数据库中的值赋值到 user 中
func CopyUserInfoClient(dbuser UserBasic) UserBasicClient {
	user := UserBasicClient{}
	user.ID = dbuser.ID
	user.Name = dbuser.Name
	user.Address = dbuser.Address
	user.RealName = dbuser.RealName
	user.Age = dbuser.Age
	user.Birthday = dbuser.Birthday
	user.Phone = dbuser.Phone
	user.Email = dbuser.Email
	user.Role = dbuser.Role
	user.Grade = dbuser.Grade
	return user
}

// 通过用户名获取用户信息
func FindUserByName(name string) UserBasic {
	// 获取实例
	user := UserBasic{}
	utils.DB.Where("name=?", name).First(&user)
	return user
}

// 通过id获取用户信息
func FindUserById(id uint) UserBasic {
	user := UserBasic{}
	utils.DB.Where("id=?", id).First(&user)
	return user
}

// 创建用户信息
func CreateUser(user UserBasic) UserBasic {
	utils.DB.Create(&user)
	fmt.Println("添加成功")
	return user
}

// 删除用户信息
func DeleteUser(user UserBasic) {
	utils.DB.Delete(&user)
}

// 修改用户信息
func ModifyUser(user UserBasic) *gorm.DB {
	return utils.DB.Model(&user).Updates(UserBasic{Age: user.Age, Address: user.Address, RealName: user.RealName})
}

// 获取用户列表
func GetUserList() []*UserBasic {
	// 创建一个容量为10的结构体指针切片
	data := make([]*UserBasic, 10)
	// 调用DB方法获取数据
	utils.DB.Find(&data)
	return data
}
